package com.newasia.server.common.template;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import com.newasia.server.common.template.dataItem.BasicAlysisData;
import com.newasia.server.common.template.dataItem.ProtocolFormat;
import com.newasia.server.common.template.dataItem.basics.CurrentStatus;
import com.newasia.server.common.template.dataItem.basics.DataType;
import com.newasia.server.dal.entitys.BaseData;

/**
 *协议解析模板
 * @author LiChong
 * @date 2020/4/16
 */
public abstract class ModuleAnalysisTemplate<T extends BaseData> {

	protected T data;
	protected ProtocolFormat protocolFormat;

	public void setBaseDataList(T data) {
		this.data = data;
	}

	public void setProtocolFormat(ProtocolFormat protocolFormat) {
		this.protocolFormat = protocolFormat;
	}

	/**
	 *获取到解析数据
	 * @author LiChong
	 * @date 2020/4/16
	 * @param  * @param monitorDetail
	 * @return void
	 */
	public BasicAlysisData getAlysisData(){
		BasicAlysisData basicAlysisData = new BasicAlysisData();
		return basicAlysisData;
	}
	/**
	 * 显示数据
	 * @param
	 * @return
	 */
	public abstract DataType getShowData();

	/**
	 *监控点在线状态
	 * @author LiChong
	 * @date 2020/4/23
	 * @param  * @param
	 * @return com.newasia.server.common.template.dataItem.basics.CurrentState
	 */
	public abstract CurrentStatus getCurrentStatus();

	/**
	 *判断是否为wifi直连
	 * @author LiChong
	 * @date 2020/4/28
	 * @param  * @param
	 * @return boolean
	 */
	public abstract boolean isWiFi();

	/**
	 *开关机选项
	 * @author LiChong
	 * @date 2020/5/21
	 * @param  * @param
	 * @return java.util.List<com.newasia.server.common.template.dataItem.basics.DataType>
	 */
	public abstract List<DataType> getBootOptions();
	
    /**
     *是否有保养
     * @author LiChong
     * @date 2020/5/21
     * @param  * @param
     * @return boolean
     */
	public abstract boolean isMaintain();

	/**
	 *是否激活
	 * @author LiChong
	 * @date 2020/5/21
	 * @param  * @param
	 * @return boolean
	 */
	public abstract boolean isActivation();

	/**
	 *总开门次数
	 * @author LiChong
	 * @date 2020/5/21
	 * @param  * @param
	 * @return com.newasia.server.common.template.dataItem.basics.DataType
	 */
    public abstract DataType countDoorOpenTotalTime();

    /**
     *当月开门次数
     * @author LiChong
     * @date 2020/5/21
     * @param  * @param
     * @return com.newasia.server.common.template.dataItem.basics.DataType
     */
    public abstract DataType countDoorOpenMonthTime();

	/**
	 *化霜电量
	 * @author LiChong
	 * @date 2020/5/21
	 * @param  * @param
	 * @return com.newasia.server.common.template.dataItem.basics.DataType
	 */
	public abstract DataType getDefrosterElectricity();
	
	/**
	 * 制冷电量
     * @author LiChong
     * @date 2020/5/21
     * @param  * @param
     * @return com.newasia.server.common.template.dataItem.basics.DataType
	 */
	public abstract DataType getRefrigerationElectricity();
	
	/**
	 * 总电量
	 * @param
	 * @return
	 */
	//public abstract DataType getTotalElect();
	
	/**
	 * 开关门次数
	 * @param
	 * @return
	 */
	//public abstract DataType getDoorNumber();
	
	/**
	 * 开关门时间
	 * @param
	 * @return
	 */
	//public abstract DataType getDoorTime();
	
	/**
	 * 化霜运行次数
	 * @param
	 * @return
	 */
	//public abstract DataType getRefNum();
	
	/**
	 * 制冷运行时间
	 * @param
	 * @return
	 */
	//public abstract DataType getRefTime();

	/**
	 * 化霜运行次数
	 * @param
	 * @return
	 */
	//public abstract DataType getDefNum();
	
	/**
	 * 化霜运行时间
	 * @param
	 * @return
	 */
	//public abstract DataType getDefTime();
	
	/**
	 * 冷风机运行次数
	 * @param
	 * @return
	 */
	//public abstract DataType getAirCoolerNum();
	
	/**
	 * 冷风机运行时间
	 * @param
	 * @return
	 */
	//public abstract DataType getAirCoolerTime();
	
	/**
	 * 冷凝风机1运行次数
	 * @param
	 * @return
	 */
	//public abstract DataType getCondensateNum();
	
	/**
	 * 冷凝风机1运行时间
	 * @param
	 * @return
	 */
	//public abstract DataType getCondensateTime();
	
	/**
	 * 冷凝风机2或者水泵运行次数
	 * @param
	 * @return
	 */
	//public abstract DataType getCondensateOrWaterPumpNum();
	
	/**
	 * 冷凝风机2或者水泵运行时间
	 * @param
	 * @return
	 */
	//public abstract DataType getCondensateOrWaterPumpTime();
	
	/**
	 * 激活月份比对
	 * @param activeTime
	 * @param nowTime
	 * @return
	 */
	public Boolean isSameMonth(Date activeTime,Date nowTime) {  
		DateFormat ymdf = new SimpleDateFormat("yyyy-MM");
		String active_time = ymdf.format(activeTime);
        String now_time = ymdf.format(nowTime);
        if(now_time != (active_time)&&!(now_time).equals(active_time)) {
        	return false;
		}
        return true;
	};
}
